package algo3.algocity.modelo.mapa;

import java.util.ArrayList;

import algo3.algocity.modelo.interfaces.MegaConstruccion;
import algo3.algocity.modelo.interfaces.MiniConstruccion;

public class Hectarea {
	
	private Terreno tipoDeTerreno;
	private Coordenada coordenada;
	private ArrayList<MiniConstruccion> miniConstrucciones = new ArrayList<MiniConstruccion>();
	private MegaConstruccion megaConstruccion;
		
	public Hectarea(Terreno tipoDeTerreno,Coordenada nuevaCoordenada) {
		
		this.megaConstruccion = null;
		this.tipoDeTerreno = tipoDeTerreno;
		this.coordenada = nuevaCoordenada;
	}

	public String obtenerTipoDeSuelo() {
	
		return this.tipoDeTerreno.obtenerTipoDeSuelo();
	}

	public Terreno obtenerTipoDeTerreno(){
		
		return this.tipoDeTerreno;
	}
	
	public Coordenada obtenerCoordenada() {
		
		return this.coordenada;
	}

	public double calcularDistanciaEnHaA(Hectarea unaHectarea) {
		
		return this.coordenada.calcularDistanciaEnHaA(unaHectarea.obtenerCoordenada());
	}

	public void construirMiniConstruccion(MiniConstruccion unaMiniConstruccion){
	  
	  this.miniConstrucciones.add(unaMiniConstruccion);
    }

	public void construirMegaConstruccion(MegaConstruccion nuevaMegaConstruccion){
		
		this.megaConstruccion = nuevaMegaConstruccion;
	}
	
	public ArrayList<MiniConstruccion> obtenerMiniConstruccion() {
		
		return this.miniConstrucciones;
	}
	
	public MegaConstruccion obtenerMegaConstruccion(){
		
	   return this.megaConstruccion;	
	}
	
	public boolean seEncuentraDentroDelRadioDeAccion(Hectarea unaHectarea) {
		
		return (this.coordenada.calcularDistanciaEnHaA(unaHectarea.obtenerCoordenada()) < 15);
	}

/*public static Hectareas crearHectareaConCatastrofe(Catastrofe unaCatastrofe) {
		
		Hectarea unaHectarea = null;
		
		if (parcela1.obtenerFila() != parcela1.obtenerColumna()) {
    		  
    		  unaHectarea = new Hectareas();
    		  unaHectarea.agregarParcelas(parcela1, parcela2, parcela3, parcela4); 
    		  unaHectarea.construirUn((Construccion) unaCatastrofe);
    	} 
    	
    	return unaHectarea;
	}
	
	public static Hectarea crearHectareaConCatastrofe(Hectareas parcela1,
			Hectareas parcela2, Hectareas parcela3,
			Hectareas parcela4, EstacionDeBomberos bomberos) {
		Hectarea unaHectarea = null;
		
		if(sonDelMismoTipoDeSuperficie(parcela1, parcela2, parcela3, parcela4)&&(
	    		parcela1.obtenerTipoDeSuelo() == bomberos.obtenerTipoDeSuelo())){
	    		  
	    		  unaHectarea = new Hectarea();
	    		  unaHectarea.agregarParcelas(parcela1, parcela2, parcela3, parcela4); 
	    		  unaHectarea.construirUn(bomberos);
	    	     
	    	}
	    	
	    	return unaHectarea;
	}
	
	
	
	/*private boolean calcularDistanciaEntreMegaConstruibleYBomberos(Hectareas unaHectarea) {
		
		Hectareas parcelaAComparar = this.obtenerPrimerParcela();//obtengo la primer parcela que se agrega a la hectarea
		ArrayList<Hectareas> parcelas = unaHectarea.obtenerParcelas();
		Iterator<Hectareas> iteradorDeParcelas = parcelas.iterator(); 
		
		while (iteradorDeParcelas.hasNext()){
			
			Hectareas parcelaActual = iteradorDeParcelas.next();
			if (parcelaAComparar.calcularDistanciaEnHaA(parcelaActual) > 15) { return false; }
		}
		
		return true;
	}
	
	public int calcularDistanciaEnHaA(Hectarea unaHectarea) {
		
		//Hectareas parcelaAComparar1 = this.obtenerPrimerParcela();//obtengo la primer parcela que se agrega a la hectarea
		//Hectareas parcelaAComparar2 = unaHectarea.obtenerPrimerParcela();
		
		return (int) parcelaAComparar1.calcularDistanciaEnHaA(parcelaAComparar2);
	
	/*public MiniConstruccion[] obtenerConstruccion() {
		
			return this.construcciones;
	}
*/
	/*public void modificarColumna(int columna) {
		
		this.coordenada.modificarPosicionY(columna);
	}
	
	public int obtenerColumna() {
		
		return this.coordenada.obtenerPosicionY();
	}

	public void modificarFila(int fila) {
		
		this.coordenada.modificarPosicionX(fila);
	}

	public int obtenerFila() {
		
		return this.coordenada.obtenerPosicionX();
	}
	  */
  }
